package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-10-01 14:39
 */

/**
 * 题目：给定一个字符串 s ，请计算这个字符串中有多少个回文子字符串。
 * 具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串。
 * <p>
 * 示例：
 * 输入：s = "aaa"
 * 输出：6
 * 解释：6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
 */

public class Test33_回文子字符串的个数 {
    //中心拓展法
    public int countSubstrings(String s) {
        int cnt1 = 0;
        int cnt2 = 0;
        for (int i = 0; i < s.length(); i++) {
            cnt1 += test(s, i, i);
            cnt2 += test(s, i, i + 1);
        }


        return cnt1 + cnt2;
    }

    public int test(String s, int l, int r) {
        int cnt = 0;
        while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
            cnt++;
            l--;
            r++;
        }
        return cnt;
    }
}
